let linkUrl = ""; // ws服务器地址
const MAX_LINK_COUNT = 5; // 最大重连次数
let link_count = 0; // 当前重连次数

let ws = {
  socket: null,
};

const initWebSocket = (url) => {
  if (!url) {
    console.error("initWebSocket 方法必须接受 url 参数");
    return;
  }

  linkUrl = url;

  const socket = new WebSocket(url);

  // 监听是否连接上ws服务器(连接成功)
  socket.onopen = handleOpen;
  // 监听是ws服务器是否断开(连接成功后，服务器关闭断开链接)
  socket.onclose = handleClose;
  // 监听是否连接ws服务器失败(链接失败)
  // socket.onerror = handleError;

  ws.socket = socket;

  // return socket;
  return ws;
};

const handleOpen = () => {
  console.log("open");
  link_count = 0; // 一旦连接成功，重连次数设置0
};

/*
  重连策略：
    1. 重连最大次数
    2. 每次重连需要有间隔时间 30s -> 5s
*/

const handleClose = () => {
  console.log("close");
  if (link_count >= MAX_LINK_COUNT) {
    console.error("尝试重新连接ws服务器失败");
    return;
  }
  // 每隔 5s 重连一次
  setTimeout(() => {
    link_count++;
    initWebSocket(linkUrl);
  }, 5000);
};

// const handleError = () => {
//   console.log("error");
// };
